#' 增加mvcML方法
#'
#' @param mv_res_all M5_mvmr生成的结果
#' @param object MV_Input
#' @param n 所有暴露和结局中的最小样本量,例如17723
#' @param DP TRUE的时候是mr_mvcML-DP，FALSE的时候是mr_mvcML-BIC
#' @param num_pert Number of perturbation when DP is TRUE, default is 200
#'
#' @return 增加mvcML方法后的多变量的结果
#' @export
#'
#' @examples
#'
#' \dontrun{
#'
#' library(Oneclick)
#'
#' mv_res_all <- M5_mvmr(MV_Input)
#'
#' # n是暴露和结局中的最小样本量,例如17723
#' # mr_mvcML-DP方法
#' mv_res_all <- mv_res_all %>% M5_add_mvcML(object=MV_Input,
#'                                           n = 17723,
#'                                           DP = TRUE)
#'
#' # mr_mvcML-BIC方法
#' mv_res_all <- mv_res_all %>% M5_add_mvcML(object=MV_Input,
#'                                           n = 17723,
#'                                           DP = FALSE)
#'
#' }
#'
#'
#'
#'
#'
#'
#'
M5_add_mvcML<-function(mv_res_all=mv_res_all,
                       object=MV_Input,
                       n,
                       DP = TRUE,
                       num_pert = 200){

  mv_res_temp <- MendelianRandomization::mr_mvcML(MV_Input,n=n,DP=DP,num_pert = num_pert)
  mv_res_temp <- data.frame( exposure = mv_res_temp@Exposure,
                             outcome = mv_res_temp@Outcome,
                             nsnp = mv_res_temp@SNPs,
                             method = ifelse(DP,"mr_mvcML-DP","mr_mvcML-BIC")  ,
                             b = mv_res_temp@Estimate,
                             se = mv_res_temp@StdError,
                             pval = mv_res_temp@Pvalue) %>%
    TwoSampleMR::generate_odds_ratios()

  mv_res_temp$`Beta (95% CI)` <- ifelse(is.na(mv_res_temp$b), NA,
                                        sprintf("%.3f (%.3f to %.3f)",
                                                mv_res_temp$b, mv_res_temp$lo_ci, mv_res_temp$up_ci))


  mv_res_temp$`OR (95% CI)` <- ifelse(is.na(mv_res_temp$or), NA,
                                      sprintf("%.3f (%.3f to %.3f)",
                                              mv_res_temp$or, mv_res_temp$or_lci95, mv_res_temp$or_uci95))


  mv_res_all <- dplyr::bind_rows(mv_res_all,mv_res_temp )
  return(mv_res_all)
}
